package sk.tramtatiri.webserv;

import java.util.List;

import javax.jws.WebMethod;
import javax.jws.WebService;

import sk.tramtatiri.MySession;
import sk.tramtatiri.data.dataobjects.Food;
import sk.tramtatiri.data.dataobjects.Recipe;
import sk.tramtatiri.data.dataobjects.Sport;
import sk.tramtatiri.data.dataobjects.User;
import sk.tramtatiri.data.dataobjects.UserInfo;

@WebService
public class PersonalTrackerWebServiceImpl implements PersonalTrackerWebService {

	public double returnBMI(int height, int weight) {
		double heightValueInM = height / 100.0;
		double bmi = weight / Math.pow(heightValueInM, 2);

		int pom = (int) (bmi * 100);

		return (pom / 100.0);
	}

	public double returnIdealWeight(int sex, int height, int weight) {
//		J. D. Robinson Formula (1983)
//		52 kg + 1.9 kg per inch over 5 feet (man)
//		49 kg + 1.7 kg per inch over 5 feet (woman)
		int weightPom0 = 0;
		double weightPom1 = 0;
		double fiveFeets = 5 * 30.48;
		double heightDiff = height - fiveFeets;
		if (sex==0) { // muz
			weightPom0 = 52;
			weightPom1 = 1.9;
		} else { // zena
			weightPom0 = 49;
			weightPom1 = 1.7;
		}
		double heightDiffInch = heightDiff / 2.54;
		
		double pom0 = weightPom0 + (weightPom1 * heightDiffInch);
		
		int pom1 = (int) (pom0 * 100);
		
		return pom1 / 100.0;
	}
	
//	
//	@Autowired
//	private UserDao userDao;
//
//	@Autowired
//	private UserInfoDao userInfoDao;
//
//	@Autowired
//	private SportDao sportDao;
//
//	@Autowired
//	private FoodDao foodDao;
//
//	@Autowired
//	private RecipeDao recipeDao;
//
//	@Autowired
//	private FriendshipDao friendshipDao;
//
//	@Autowired
//	private InOutHelperDao inOutHelperDao;
//
//	@Autowired
//	private UserFoodDao userFoodDao;
//
//	@Autowired
//	private UserRecipeDao userRecipeDao;
//
//	@Autowired
//	private UserSportDao userSportDao;
//	
//	@WebMethod
//	public List<User> getAllFriends(long user_id) {
//		return friendshipDao.findAllFriendsOfUser(user_id);
//	}
//
//	@WebMethod
//	public List<UserInfo> getAllUserInfos(long user_id) {
//		return userDao.load(user_id).getUserInfos();
//	}
//
//	@WebMethod
//	public List<Object[]> getAllInOuts(long user_id, int days) {
//		return inOutHelperDao.findByUserLastXDays(user_id, days-1);
//	}
//
//	@WebMethod
//	public List<Sport> getAllSports() {
//		return sportDao.findAll();
//	}
//
//	@WebMethod
//	public List<Recipe> getAllRecipes() {
//		return recipeDao.findAll();
//	}
//
//	@WebMethod
//	public List<Food> getAllFoods() {
//		return foodDao.findAll();
//	}
//
//	@WebMethod
//	public void setUserInfoToUser(long user_id, int weight, int waist) {
//		Calendar cal = Calendar.getInstance();
//		cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
//		final Date date = new Date(cal.getTimeInMillis());
//		
//		UserInfo uinfo0 = userInfoDao.findByUserAndDate(
//				user_id, date);
//
//		if (uinfo0!=null) {
//			UserInfo uinfoTmp = uinfo0;
//			UserInfo temp = uinfoTmp;
//			
//				uinfoTmp.setWeight(weight);
//				uinfoTmp.setWaist(waist);
//			
//			userDao.load(user_id)
//					.getUserInfos().remove(temp);
//			userDao.load(user_id)
//					.getUserInfos().add(uinfoTmp);
//		} else {
//			UserInfo uinfo1 = new UserInfo();
//			uinfo1.setDate(new Date(cal.getTimeInMillis()));
//			uinfo1.setUser(userDao.load(user_id));
//			uinfo1.setUser_id(user_id);
//				uinfo1.setWeight(weight);
//				uinfo1.setWaist(waist);
//			userInfoDao.save(uinfo1);
//			userDao.load(user_id)
//					.getUserInfos().add(uinfo1);
//		}
//	}
//	
//	@WebMethod
//	public void addSportToUser(long user_id, long sport_id, int duration) {
//		Calendar cal = Calendar.getInstance();
//		cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
//		final Date date = new Date(cal.getTimeInMillis());
//		
//		Sport selectedSport = sportDao.load(sport_id);
//		
//		double pom = duration / 60.0;
//		int totalCalories = (int) Math.round(pom * selectedSport.getCalories());
//		int inKJ = Math.round((float) (totalCalories * 4.19));
//		UserSport userSport = new UserSport();
//		userSport.setDate(date);
//		userSport.setDuration(duration);
//		userSport.setUser(userDao.load(user_id));
//		userSport.setSport(selectedSport);
//		userSport.setUser_id(user_id);
//		userSport.setSport_id(selectedSport.getId());
//		userSport.setTotalCalories(inKJ);
//
//		userSportDao.save(userSport);
//		
//		userDao.load(user_id).getSports().add(userSport);
//		selectedSport.getUsers().add(userSport);
//		
//		sumUserOut(user_id, date);
//	}
//
//	@WebMethod
//	public void addRecipeToUser(long user_id, long recipe_id) {
//		Calendar cal = Calendar.getInstance();
//		cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
//		final Date date = new Date(cal.getTimeInMillis());
//		
//		
//		Recipe recipe = recipeDao.load(recipe_id);
//		UserRecipe userRecipe = new UserRecipe();
//
//		userRecipe.setDate(date);
//		userRecipe.setUser(userDao.load(user_id));
//		userRecipe.setUserId(user_id);
//		userRecipe.setDayTime(0);
//		userRecipe.setTotalCalories(recipe.getCalories());
//		userRecipe.setRecipe(recipe);
//		userRecipe.setRecipeId(recipe_id);
//		userRecipeDao.save(userRecipe);
//
//		userDao.load(user_id).getRecipes().add(userRecipe);
//		recipe.getUsers().add(userRecipe);
//		
//		sumUserIn(user_id, date);
//	}
//
//	@WebMethod
//	public void addFoodToUser(long user_id, long food_id, int quantity) {
//		Calendar cal = Calendar.getInstance();
//		cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
//		final Date date = new Date(cal.getTimeInMillis());
//		
//		Food food = foodDao.load(food_id);
//		UserFood userFood = new UserFood();
//
//		userFood.setDate(date);
//		userFood.setUser(userDao.load(user_id));
//		userFood.setUserId(user_id);
//		userFood.setQuantity(quantity);
//		int foodCalories = food.getCalories();
//		userFood.setTotalCalories(foodCalories * (quantity / 100));
//		userFood.setFood(food);
//		userFood.setFoodId(food_id);
//		userFoodDao.save(userFood);
//		
//		userDao.load(user_id).getFoods().add(userFood);
//		food.getUsers().add(userFood);
//		
//		sumUserIn(user_id, date);
//	}
//
//	private void sumUserIn(long user_id, Date date) {
//		int totalTodayRec = userRecipeDao.sumUserToday(user_id);
//		int totalTodayFood = userFoodDao.sumUserToday(user_id);
//		InOutHelper todayHelper = inOutHelperDao.findByUserToday(user_id);
//		if (todayHelper != null)
//			todayHelper.setCaloriesIn(totalTodayRec + totalTodayFood);
//		else {
//			InOutHelper newHelper = new InOutHelper();
//			newHelper.setDate(date);
//			newHelper.setCaloriesIn(totalTodayRec
//					+ totalTodayFood);
//			newHelper.setUsrid(user_id);
//			inOutHelperDao.save(newHelper);
//		}
//	}
//	
//	private void sumUserOut(long user_id, Date date) {
//		InOutHelper todayInOut = inOutHelperDao
//				.findByUserToday(user_id);
//		int out = userSportDao.sumUserToday(user_id);
//		if (todayInOut != null) {
//			todayInOut.setCaloriesOut(out);
//		} else {
//			InOutHelper newInOut = new InOutHelper();
//			newInOut.setDate(date);
//			newInOut.setUsrid(user_id);
//			newInOut.setCaloriesOut(out);
//			inOutHelperDao.save(newInOut);
//		}
//	}
}
